--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tests/electron/mainHelpers.test.js dev (af76f09d) Text, 7.23 KB
Tff7b72import Tb4b4b4{ Te6edf3describeTb4b4b4, Te6edf3expectTb4b4b4, Te6edf3it Tb4b4b4} Tff7b72from Ta5d6ff"vitest"Tb4b4b4;
Tff7b72import Tb4b4b4{ Te6edf3createRequire Tb4b4b4} Tff7b72from Ta5d6ff"module"Tb4b4b4;
Tff7b72const Te6edf3require Tff7b72= Te6edf3createRequireTb4b4b4(Tff7b72importTb4b4b4.Te6edf3metaTb4b4b4.Te6edf3urlTb4b4b4)Tb4b4b4;
Tff7b72const Tb4b4b4{
Te6edf3getUserProvidedArgumentsTb4b4b4,
Te6edf3parseArgvFlagTb4b4b4,
Te6edf3resolvePortableStorageRootsTb4b4b4,
Te6edf3formatRenderProcessGoneDetailsTb4b4b4,
Te6edf3isLocalBackendUrlTb4b4b4,
Te6edf3shouldOpenInElectronWindowTb4b4b4,
Tb4b4b4} Tff7b72= Te6edf3requireTb4b4b4(Ta5d6ff"../../electron/mainHelpers.js"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3path Tff7b72= Te6edf3requireTb4b4b4(Ta5d6ff"node:path"Tb4b4b4)Tb4b4b4;
Te6edf3describeTb4b4b4(Ta5d6ff"electron/mainHelpers"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3itTb4b4b4(Ta5d6ff"getUserProvidedArguments filters ignored flags and skips argv[0]"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3argv Tff7b72= Tb4b4b4[Ta5d6ff"/app/electron"Tb4b4b4, Ta5d6ff"--no-https"Tb4b4b4, Ta5d6ff"--no-sandbox"Tb4b4b4, Ta5d6ff"--ozone-platform-hint=auto"Tb4b4b4, Ta5d6ff"--port"Tb4b4b4, Ta5d6ff"1"Tb4b4b4]Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3getUserProvidedArgumentsTb4b4b4(Te6edf3argvTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Tb4b4b4[Ta5d6ff"--no-https"Tb4b4b4, Ta5d6ff"--port"Tb4b4b4, Ta5d6ff"1"Tb4b4b4]Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"formatRenderProcessGoneDetails handles null/undefined"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3formatRenderProcessGoneDetailsTb4b4b4(Tff7b72nullTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"no details"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3formatRenderProcessGoneDetailsTb4b4b4(Tff7b72undefinedTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"no details"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"formatRenderProcessGoneDetails serializes reason and exitCode"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3s Tff7b72= Te6edf3formatRenderProcessGoneDetailsTb4b4b4(Tb4b4b4{ Te6edf3reasonTff7b72: Ta5d6ff"crashed"Tb4b4b4, Te6edf3exitCodeTff7b72: T79c0ff5 Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"crashed"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3sTb4b4b4)Tb4b4b4.Te6edf3toContainTb4b4b4(Ta5d6ff"5"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"isLocalBackendUrl matches localhost backends only"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3isLocalBackendUrlTb4b4b4(Ta5d6ff"https://127.0.0.1:9337/api"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3isLocalBackendUrlTb4b4b4(Ta5d6ff"http://localhost:9337/"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3isLocalBackendUrlTb4b4b4(Ta5d6ff"https://example.com"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3isLocalBackendUrlTb4b4b4(Ta5d6ff""Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"shouldOpenInElectronWindow keeps local popouts and call windows in Electron"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3shouldOpenInElectronWindowTb4b4b4(Ta5d6ff"https://127.0.0.1:9337/#/popout/map"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3shouldOpenInElectronWindowTb4b4b4(Ta5d6ff"https://127.0.0.1:9337/call.html"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3shouldOpenInElectronWindowTb4b4b4(Ta5d6ff"http://localhost:9337/#/popout/messages/abc"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3shouldOpenInElectronWindowTb4b4b4(Ta5d6ff"blob:https://127.0.0.1:9337/print"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3shouldOpenInElectronWindowTb4b4b4(Ta5d6ff"https://127.0.0.1:9337/rnode-flasher/index.html"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3shouldOpenInElectronWindowTb4b4b4(Ta5d6ff"https://example.com/#/popout/map"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3shouldOpenInElectronWindowTb4b4b4(Ta5d6ff""Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"shouldAllowInWindowNavigation keeps local backend URLs in Electron"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Tb4b4b4{ Te6edf3shouldAllowInWindowNavigation Tb4b4b4} Tff7b72= Te6edf3requireTb4b4b4(Ta5d6ff"../../electron/mainHelpers.js"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3shouldAllowInWindowNavigationTb4b4b4(Ta5d6ff"https://127.0.0.1:9337/#/tools/micron-editor"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3shouldAllowInWindowNavigationTb4b4b4(Ta5d6ff"http://localhost:9337/"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3shouldAllowInWindowNavigationTb4b4b4(Ta5d6ff"blob:https://127.0.0.1:9337/print"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72trueTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3shouldAllowInWindowNavigationTb4b4b4(Ta5d6ff"https://example.com/"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3shouldAllowInWindowNavigationTb4b4b4(Ta5d6ff"file:///etc/passwd"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"parseArgvFlag reads a value following the flag"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3parseArgvFlagTb4b4b4(Tb4b4b4[Ta5d6ff"--storage-dir"Tb4b4b4, Ta5d6ff"/mnt/persist"Tb4b4b4]Tb4b4b4, Ta5d6ff"--storage-dir"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"/mnt/persist"Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"parseArgvFlag returns null when the flag is missing or has no value"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3parseArgvFlagTb4b4b4(Tb4b4b4[Ta5d6ff"--headless"Tb4b4b4]Tb4b4b4, Ta5d6ff"--storage-dir"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeNullTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3parseArgvFlagTb4b4b4(Tb4b4b4[Ta5d6ff"--storage-dir"Tb4b4b4]Tb4b4b4, Ta5d6ff"--storage-dir"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeNullTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3parseArgvFlagTb4b4b4(Tb4b4b4[Ta5d6ff"--storage-dir"Tb4b4b4, Ta5d6ff"--headless"Tb4b4b4]Tb4b4b4, Ta5d6ff"--storage-dir"Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toBeNullTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3describeTb4b4b4(Ta5d6ff"electron/mainHelpers resolvePortableStorageRoots (portable mode)"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3homeDir Tff7b72= Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(Ta5d6ff"home"Tb4b4b4, Ta5d6ff"user"Tb4b4b4)Tb4b4b4;
Tff7b72function Te6edf3resolveTb4b4b4(Te6edf3overrides Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3resolvePortableStorageRootsTb4b4b4(Tb4b4b4{
Te6edf3argvTff7b72: Tb4b4b4[Ta5d6ff"/app/electron"Tb4b4b4]Tb4b4b4,
Te6edf3envTff7b72: Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3homeDirTb4b4b4,
Te6edf3isWindowsTff7b72: Tff7b72falseTb4b4b4,
Te6edf3portableExecutableDirTff7b72: Tff7b72nullTb4b4b4,
Tb4b4b4...Te6edf3overridesTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3itTb4b4b4(Ta5d6ff"defaults to the home directory when nothing is configured"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Te6edf3expectTb4b4b4(Te6edf3resolveTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Tb4b4b4{
Te6edf3storageDirTff7b72: Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(Te6edf3homeDirTb4b4b4, Ta5d6ff".reticulum-meshchatx"Tb4b4b4)Tb4b4b4,
Te6edf3reticulumConfigDirTff7b72: Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(Te6edf3homeDirTb4b4b4, Ta5d6ff".reticulum"Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"derives storage and reticulum roots from --data-dir"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3roots Tff7b72= Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3argvTff7b72: Tb4b4b4[Ta5d6ff"/app/electron"Tb4b4b4, Ta5d6ff"--data-dir"Tb4b4b4, Ta5d6ff"/mnt/tails/persist"Tb4b4b4] Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3rootsTb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Tb4b4b4{
Te6edf3storageDirTff7b72: Te6edf3pathTb4b4b4.Te6edf3resolveTb4b4b4(Ta5d6ff"/mnt/tails/persist"Tb4b4b4, Ta5d6ff"storage"Tb4b4b4)Tb4b4b4,
Te6edf3reticulumConfigDirTff7b72: Te6edf3pathTb4b4b4.Te6edf3resolveTb4b4b4(Ta5d6ff"/mnt/tails/persist"Tb4b4b4, Ta5d6ff".reticulum"Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"derives storage and reticulum roots from MESHCHAT_DATA_DIR"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3roots Tff7b72= Te6edf3resolveTb4b4b4(Tb4b4b4{ Te6edf3envTff7b72: Tb4b4b4{ Te6edf3MESHCHAT_DATA_DIRTff7b72: Ta5d6ff"/mnt/tails/persist" Tb4b4b4} Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3rootsTb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Tb4b4b4{
Te6edf3storageDirTff7b72: Te6edf3pathTb4b4b4.Te6edf3resolveTb4b4b4(Ta5d6ff"/mnt/tails/persist"Tb4b4b4, Ta5d6ff"storage"Tb4b4b4)Tb4b4b4,
Te6edf3reticulumConfigDirTff7b72: Te6edf3pathTb4b4b4.Te6edf3resolveTb4b4b4(Ta5d6ff"/mnt/tails/persist"Tb4b4b4, Ta5d6ff".reticulum"Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"explicit --storage-dir and --reticulum-config-dir win over --data-dir"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3roots Tff7b72= Te6edf3resolveTb4b4b4(Tb4b4b4{
Te6edf3argvTff7b72: Tb4b4b4[Ta5d6ff"/app/electron"Tb4b4b4, Ta5d6ff"--data-dir"Tb4b4b4, Ta5d6ff"/mnt/tails/persist"Tb4b4b4, Ta5d6ff"--storage-dir"Tb4b4b4, Ta5d6ff"/mnt/tails/custom-storage"Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3rootsTb4b4b4.Te6edf3storageDirTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"/mnt/tails/custom-storage"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3rootsTb4b4b4.Te6edf3reticulumConfigDirTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3pathTb4b4b4.Te6edf3resolveTb4b4b4(Ta5d6ff"/mnt/tails/persist"Tb4b4b4, Ta5d6ff".reticulum"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"explicit MESHCHAT_STORAGE_DIR / MESHCHAT_RETICULUM_CONFIG_DIR env vars win over MESHCHAT_DATA_DIR"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3roots Tff7b72= Te6edf3resolveTb4b4b4(Tb4b4b4{
Te6edf3envTff7b72: Tb4b4b4{
Te6edf3MESHCHAT_DATA_DIRTff7b72: Ta5d6ff"/mnt/tails/persist"Tb4b4b4,
Te6edf3MESHCHAT_STORAGE_DIRTff7b72: Ta5d6ff"/mnt/tails/custom-storage"Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3rootsTb4b4b4.Te6edf3storageDirTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Ta5d6ff"/mnt/tails/custom-storage"Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3rootsTb4b4b4.Te6edf3reticulumConfigDirTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3pathTb4b4b4.Te6edf3resolveTb4b4b4(Ta5d6ff"/mnt/tails/persist"Tb4b4b4, Ta5d6ff".reticulum"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"argv flags win over env vars for the same setting"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3roots Tff7b72= Te6edf3resolveTb4b4b4(Tb4b4b4{
Te6edf3argvTff7b72: Tb4b4b4[Ta5d6ff"/app/electron"Tb4b4b4, Ta5d6ff"--data-dir"Tb4b4b4, Ta5d6ff"/mnt/argv-persist"Tb4b4b4]Tb4b4b4,
Te6edf3envTff7b72: Tb4b4b4{ Te6edf3MESHCHAT_DATA_DIRTff7b72: Ta5d6ff"/mnt/env-persist" Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3rootsTb4b4b4.Te6edf3storageDirTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3pathTb4b4b4.Te6edf3resolveTb4b4b4(Ta5d6ff"/mnt/argv-persist"Tb4b4b4, Ta5d6ff"storage"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"falls back to the Windows portable executable directory when set"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3roots Tff7b72= Te6edf3resolveTb4b4b4(Tb4b4b4{
Te6edf3isWindowsTff7b72: Tff7b72trueTb4b4b4,
Te6edf3portableExecutableDirTff7b72: Ta5d6ff"E:\\Portable"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3rootsTb4b4b4)Tb4b4b4.Te6edf3toEqualTb4b4b4(Tb4b4b4{
Te6edf3storageDirTff7b72: Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(Ta5d6ff"E:\\Portable"Tb4b4b4, Ta5d6ff".reticulum-meshchatx"Tb4b4b4)Tb4b4b4,
Te6edf3reticulumConfigDirTff7b72: Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(Ta5d6ff"E:\\Portable"Tb4b4b4, Ta5d6ff".reticulum"Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"ignores the Windows portable executable directory on non-Windows platforms"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3roots Tff7b72= Te6edf3resolveTb4b4b4(Tb4b4b4{
Te6edf3isWindowsTff7b72: Tff7b72falseTb4b4b4,
Te6edf3portableExecutableDirTff7b72: Ta5d6ff"/mnt/portable"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3rootsTb4b4b4.Te6edf3storageDirTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(Te6edf3homeDirTb4b4b4, Ta5d6ff".reticulum-meshchatx"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3itTb4b4b4(Ta5d6ff"--data-dir wins over the Windows portable executable directory"Tb4b4b4, Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72const Te6edf3roots Tff7b72= Te6edf3resolveTb4b4b4(Tb4b4b4{
Te6edf3argvTff7b72: Tb4b4b4[Ta5d6ff"/app/electron"Tb4b4b4, Ta5d6ff"--data-dir"Tb4b4b4, Ta5d6ff"/mnt/tails/persist"Tb4b4b4]Tb4b4b4,
Te6edf3isWindowsTff7b72: Tff7b72trueTb4b4b4,
Te6edf3portableExecutableDirTff7b72: Ta5d6ff"E:\\Portable"Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Te6edf3expectTb4b4b4(Te6edf3rootsTb4b4b4.Te6edf3storageDirTb4b4b4)Tb4b4b4.Te6edf3toBeTb4b4b4(Te6edf3pathTb4b4b4.Te6edf3resolveTb4b4b4(Ta5d6ff"/mnt/tails/persist"Tb4b4b4, Ta5d6ff"storage"Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4)Tb4b4b4;
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────